package com.atwulidun.state20.loanplatform;

public class ClientTest {
    public static void main(String[] args) {
        // 创建context对象
        Context context = new Context();
        // 将当前状态设置为PublishState
        context.setState(new PublishState());
        context.getCurrentState();// 输出：当前状态:PUBLISHED
        // 此时context中的state是PublishState对象，相当于调PublishState对象的acceptOrderEvent方法，从而将state变为NotPayState对象
        context.acceptOrderEvent(context);// 输出：当前状态:NOT_PAY
        // 此时context中的state是NotPayState对象，相当于调NotPayState对象的payOrderEvent方法，从而将state变为PaidState对象
        context.payOrderEvent(context);// 输出：当前状态:PAID
        // 检测失败时，会抛出异常
        try {
            // 只有GenerateState类重写了AbstractState的checkFailEvent方法，只有Context中的state为GenerateState对象时调用checkFailEvent方法才不会抛异常
//            // 将Context中state设置为GenerateState对象
//            context.setState(new GenerateState());// 此时不会抛出异常
            context.checkFailEvent(context);
            System.out.println("流程正常..");
        } catch (Exception e) {
            // 由于此时state为PaidState对象，故调用checkFailEvent方法时会抛异常
            System.out.println(e.getMessage());
        }
    }
}
